package Class.Homemade.damo0523.demo2;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-05-23
 * Time: 21:54
 */
public class Test {
    public static void main(String[] args) {
        //对象的实例化
        //圆形、方形、三角形
        Rect rect = new Rect();
        Cycle cycle = new Cycle();
        Triangle triangle = new Triangle();

        Shape[] shapes = { cycle,rect,cycle,rect,triangle };

        for (Shape shape : shapes) {
            shape.draw();
        }
        //等价于：
        for (int i = 0; i < shapes.length; i++) {
            //很像：Animal animal = new Dog();
            Shape shape = shapes[i];
            shape.draw();
        }
    }
    public static void main2(String[] args) {
        //对象的实例化
        //圆形、方形、三角形
        Rect rect = new Rect();
        Cycle cycle = new Cycle();
        Triangle triangle = new Triangle();

        String[] strings = { "cycle","rect","cycle","rect","triangle" };
        //equals()方法：用于比较两个对象的内容是否相等。
        for(String s : strings ) {
            if(s.equals("cycle")){
                cycle.draw();
            }else if(s.equals("rect")) {
                rect.draw();
            }else {
                triangle.draw();
            }
        }
        //等价于：
    }
    //成员方法 -> 普通方法
    public static void drawMap(Shape shape) {
        //Shape：类型 shape：类型名
        shape.draw();
    }
    public static void main1(String[] args) {
        /*
        多态实现的条件
        1.在继承的条件下进行
        2.子类必须对父类的方法进行重写
        3.通过父类的引用调用重写的方法
         */
        //对象的实例化
        //圆形、方形、三角形
        Rect rect = new Rect();
        Cycle cycle = new Cycle();
        Triangle triangle = new Triangle();
        //向上转型 -> 传参
        drawMap(rect);
        System.out.println("=======");
        drawMap(cycle);
        System.out.println("=======");
        drawMap(triangle);
        System.out.println("=======");
        /*重写的注意事项：
        1.不能是一个静态方法(static)
        2.被 final 修饰的方法，不能被重写，封装方法(final)
        3.如果子类重写父类的方法 子类的权限要大于等于父类的权限
        4.private修饰的方法，是不能被重写的，封装类就是不想被重写(private)
         */

        /*
        问题：什么是重写？什么是重载？
         */

    }
}
